BaseProtocolServer
Classe base para servidores de protocolo (FIX, SBE, etc.). Contém infraestrutura compartilhada: ciclo de vida, sessões, assinaturas, canais de mensagens, tarefas de fundo.
Herda de: BaseLogReceiver
Implementa: IProtocolServer, ILogReceiver, ILogSource, IDisposable
Construtores
protected BaseProtocolServer(TSettings settings)
baseProtocolServer = BaseProtocolServer(settings)
Inicializa uma nova instância.
- settings
- Configuração do servidor.
Propriedades
protected LoginRateLimiter LoginRateLimiter { get; private set; }
value = baseProtocolServer.LoginRateLimiter
baseProtocolServer.LoginRateLimiter = value
Limitador de taxa para tentativas de login (compartilhado entre todos os ouvintes).
public IEnumerable<IMessageListenerSession> Sessions { get; }
value = baseProtocolServer.Sessions
Sessões activas.
public ChannelStates State { get; protected set; }
value = baseProtocolServer.State
baseProtocolServer.State = value
Obtém o armazenamento do estado subjacente.
Métodos
public void AddSubscription(ServerSubscription subscription)
baseProtocolServer.AddSubscription(subscription)
Adicionar assinatura.
- subscription
- Assinatura.
protected virtual void ClearState()
baseProtocolServer.ClearState()
Limpar todo o estado: ouvintes, sessões, assinaturas.
protected string Convert(string value)
result = baseProtocolServer.Convert(value)
Converter texto para latim se configurado.
protected abstract TSubscription CreateSubscription(TClientSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = baseProtocolServer.CreateSubscription(session, requestId, subscription, type)
Criar uma instância de informação de subscrição.
public void Disconnect(IMessageListenerSession session)
baseProtocolServer.Disconnect(session)
Desligar sessão.
- session
- Sessão.
protected override void DisposeManaged()
baseProtocolServer.DisposeManaged()
Libertar recursos.
protected void EnqueueMessage(TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, requestId, handler, cancellationToken)
Coloque a mensagem em espera para uma sessão com o ID da solicitação.
protected void EnqueueMessage(TSubscription subscription, TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, session, requestId, handler, cancellationToken)
Enqueue principal: agendar trabalho em uma sessão cliente.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Coloque a mensagem para vários assinantes.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Coloque a mensagem para vários assinantes (com resultado bool).
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Enquear mensagem para uma assinatura única.
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Coloque a mensagem para uma assinatura única (com resultado bool).
protected void EnqueueMessage(TClientSession session, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, handler, cancellationToken)
Colocar a mensagem para uma sessão (sem pedido de ID).
protected abstract string GetSessionKey(TClientSession session)
result = baseProtocolServer.GetSessionKey(session)
Use a chave para agrupar as sessões de clientes (e.g. SenderCompId).
public IEnumerable<ServerSubscription> GetSubscriptions(IMessageListenerSession session)
result = baseProtocolServer.GetSubscriptions(session)
Obter a subscrição da sessão especificada.
- session
- Sessão.
Retorna: Assinaturas.
public bool HasSubscriptions(DataType dataType, SecurityId securityId)
result = baseProtocolServer.HasSubscriptions(dataType, securityId)
Há assinantes.
protected abstract bool IsStubSubscription(TSubscription subscription)
result = baseProtocolServer.IsStubSubscription(subscription)
Verifique se a subscrição é um escrivão (titular de lugar).
public override void Load(SettingsStorage storage)
baseProtocolServer.Load(storage)
Carregar as configurações.
- storage
- Configuração do armazenamento.
protected abstract void OnClearListenerState()
baseProtocolServer.OnClearListenerState()
Limpar o estado de ouvinte específico do protocolo (stop outleners, etc.).
protected abstract void OnStartListeners(CancellationToken cancellationToken)
baseProtocolServer.OnStartListeners(cancellationToken)
Iniciar ouvintes específicos do protocolo (TCP, etc.). Adicionar tarefas a _backgroundTasks.
protected abstract void ProcessInMessage(Message message, CancellationToken cancellationToken)
baseProtocolServer.ProcessInMessage(message, cancellationToken)
Processe uma mensagem recebida e route para clientes subscritos.
protected virtual void ProcessLogout(TClientSession session)
baseProtocolServer.ProcessLogout(session)
Processar o logout/desconexão do cliente.
protected void RaiseNewOutMessage(IMessageListenerSession session, Message message)
baseProtocolServer.RaiseNewOutMessage(session, message)
Escreva mensagem de saída para o canal.
protected void RaiseSessionConnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionConnected(session)
Levantar o evento conectado à sessão.
protected void RaiseSessionDisconnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionDisconnected(session)
Levantar o evento desconectado da sessão.
public bool RemoveSubscription(ServerSubscription subscription)
result = baseProtocolServer.RemoveSubscription(subscription)
Remover assinatura.
- subscription
- Assinatura.
Retorna: se a assinatura foi encontrada, caso contrário .
public bool Resume(ServerSubscription subscription)
result = baseProtocolServer.Resume(subscription)
Retomar a subscrição.
- subscription
- Assinatura.
Retorna: se a assinatura foi encontrada, caso contrário .
public void Resume(IMessageListenerSession session)
baseProtocolServer.Resume(session)
Retomar sessão.
- session
- Sessão.
public IAsyncEnumerable<ValueTuple<IMessageListenerSession, Message>> RunAsync(CancellationToken cancellationToken)
result = baseProtocolServer.RunAsync(cancellationToken)
Execute o processamento de mensagens assync e retorne as mensagens de saída como IAsyncEnumerable. Abre o servidor no início e fecha no fim.
public override void Save(SettingsStorage storage)
baseProtocolServer.Save(storage)
Gravar as definições.
- storage
- Configuração do armazenamento.
protected abstract void ScheduleSessionWork(TClientSession session, ServerSubscription subscription, string requestId, Func<TClientSession, string, CancellationToken, ValueTask<bool>> handler)
baseProtocolServer.ScheduleSessionWork(session, subscription, requestId, handler)
Agendar o trabalho numa fila de saída de uma sessão de clientes.
public virtual bool SendInMessage(Message message)
result = baseProtocolServer.SendInMessage(message)
Envie mensagem recebida para o servidor para processamento e encaminhamento para clientes.
protected void StartServer(CancellationToken cancellationToken)
baseProtocolServer.StartServer(cancellationToken)
Iniciar o servidor: inicializar o estado, iniciar os ouvintes e as tarefas de fundo.
protected void StopServer()
baseProtocolServer.StopServer()
Parar o servidor: cancelar tarefas, canais completos, estado limpo.
public void Suspend(IMessageListenerSession session)
baseProtocolServer.Suspend(session)
Suspenda a sessão.
- session
- Sessão.
public bool Suspend(ServerSubscription subscription)
result = baseProtocolServer.Suspend(subscription)
Suspenda a subscrição.
- subscription
- Assinatura.
Retorna: se a assinatura foi encontrada, caso contrário .
Eventos
public event Action<IMessageListenerSession> SessionConnected
baseProtocolServer.SessionConnected += handler
Evento conectado à sessão.
public event Action<IMessageListenerSession> SessionDisconnected
baseProtocolServer.SessionDisconnected += handler
O evento da sessão foi desligado.
public event Action StateChanged
baseProtocolServer.StateChanged += handler
Evento de mudança de estado.
public event Action<ServerSubscription> SubscriptionChanged
baseProtocolServer.SubscriptionChanged += handler
A subscrição do cliente mudou o evento.
Campos
protected readonly List<Task> _backgroundTasks
value = baseProtocolServer._backgroundTasks
Tarefas de fundo (aceitar clientes, mensagens de processo, etc.).
protected readonly SynchronizedSet<long> _cancellationRequests
value = baseProtocolServer._cancellationRequests
Pendente cancelamento pedido IDs de transação.
protected readonly SynchronizedSet<ServerSubscription> _changedSubscriptions
value = baseProtocolServer._changedSubscriptions
Assinaturas alteradas até à notificação.
protected readonly CachedSynchronizedDictionary<string, CachedSynchronizedList<TClientSession>> _clientSessions
value = baseProtocolServer._clientSessions
Sessões de clientes agrupadas por chave de sessão (e.g. SenderCompId).
protected readonly Channel<Message> _incomingMessages
value = baseProtocolServer._incomingMessages
Canal de mensagens a chegar.
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _outgoingMessages
value = baseProtocolServer._outgoingMessages
Canal de mensagens de saída (sessão + pares de mensagens).
protected readonly SubscriptionHolder<TSubscription, TClientSession> _subscriptions
value = baseProtocolServer._subscriptions
Titular da assinatura.